package com.zhoug.tmap.json;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.zhoug.common.utils.GsonUtils;

import java.math.BigDecimal;

/**
 * @description: 类的简要描述
 * @author: Administrator
 * @date: 2025/9/17 16:42
 */
public class JsonObjectWrapper {
    private JsonObject jsonObject;

    public JsonObjectWrapper() {
    }

    public void setJsonObject(JsonObject jsonObject) {
        this.jsonObject = jsonObject;
    }

    public JsonObjectWrapper with(JsonObject jsonObject) {
        JsonObjectWrapper wrapper = new JsonObjectWrapper();
        wrapper.setJsonObject(jsonObject);
        return wrapper;
    }

    public JsonElement get(String key) {
        if (this.jsonObject != null) {
            JsonElement jsonElement = this.jsonObject.get(key);
            if (GsonUtils.isNonNull(jsonElement)) {
                return jsonElement;
            }
        }

        return null;
    }

    public JsonObject getAsJsonObject(String key) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? null : jsonElement.getAsJsonObject();
    }

    public String getAsString(String key) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? null : jsonElement.getAsString();
    }

    public boolean getAsBoolean(String key, boolean def) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? def : jsonElement.getAsBoolean();
    }

    public double getAsDouble(String key, double def) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? def : jsonElement.getAsDouble();
    }

    public float getAsFloat(String key, float def) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? def : jsonElement.getAsFloat();
    }

    public int getAsInt(String key, int def) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? def : jsonElement.getAsInt();
    }

    public long getAsLong(String key, long def) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? def : jsonElement.getAsLong();
    }

    public byte getAsByte(String key, byte def) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? def : jsonElement.getAsByte();
    }

    public short getAsShort(String key, short def) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? def : jsonElement.getAsShort();
    }

    public JsonArray getAsJsonArray(String key) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? null : jsonElement.getAsJsonArray();
    }

    public BigDecimal getAsBigDecimal(String key) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? null : jsonElement.getAsBigDecimal();
    }

    public char getAsCharacter(String key, char def) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? def : jsonElement.getAsCharacter();
    }

    public Number getAsNumber(String key) {
        JsonElement jsonElement = this.get(key);
        return jsonElement == null ? null : jsonElement.getAsNumber();
    }
}
